Android Gradle 本地化部署 maven

1、Gradle 脚本

        在 Android Studio 中,我们经常引用 aar 文件及 maven 库中的资源。一般来说,我们通过 compile 'package:library_name:version' 的方式来引用 maven 库中的包。而通过 compile(name: 'xxx', ext: 'aar') 的方法引用本地生成或其他项目生成的 aar 包(详细请见)。

2、Gradle 引用方式

        上面说的本地直接引用 aar 文件的方式有一些问题,比如:

  • 资源文件预览等等会有一些 Bug;
  • 新生成 aar 后,在多个项目之间共享时,频繁的拷贝同步会很麻烦。

        所以我们尝试在本地部署我们的项目,然后在其他项目中直接可以引用了。首先,我们知道,在 Build 脚本运行 compile package:library_name:version 时,会去下面一些目录寻找:

        如果你额外在 build.gradle 中自定义配置了本地目录的话,还会去这个目录下面查找,比如在 build.gradle 中配置了:

        
额外查找目录

    那么查询的目录会多加四个:

  • file:/PROJECT_PATH/commonlibs/library_name.jar
  • file:/PROJECT_PATH/commonlibs/library_name-version.jar
  • file:/PROJECT_PATH/MODULE_NAME/libs/library_name.jar
  • file:/PROJECT_PATH/MODULE_NAME/libs/library_name-version.jar

当在这些目录都找不到依赖后,会运行出错,组建失败。

找不到库出错

3、本地部署 aar

        在知道了 Gradle 的引用查找原则之后,我们就可以将自己的项目按需部署到本地了。我们一般配置在 ANDROID_HOME/extras/android/m2repository 这个目录中,这样,其他所有工程都可以很方便的访问到,同步更新也只更新一个地方即可。

        首先,我们在系统环境变量中设置 ANDROID_HOME——指向 Android SDK 的安装目录,确保本地部署时能找到相应的目录。

        然后,为所需部署的 Module 编写 build.gradle 脚本如下:

        
部署 Gradle 脚本编写

        我们可以看出,有如下步骤:

  • apply plugin: 'maven':引用 maven 插件进行部署;
  • 增加 uploadArchives Task,用于部署 Module;
  • mavenDeployer 中编写相应的配置,包括部署路径、version、groupId、artifactId 等等;

        我们可以看到,我们将部署目标路径设为:file://localhost/ANDROID_HOME/extras/android/m2repository/,这样部署后,相应的 aar、pos、jar 等等文件都会在这个目录中找到。

4、执行部署

        执行部署非常简单,我们可以在命令行执行 gradle uploadArchives 这个任务。或者另一种办法是在 Gradle Projects 窗口找到这个 Module 对应的部署 Task,双击执行这个 Task 即可:

        
部署 Task

        在执行完成后,我们在相应的目标目录可以找到部署的文件:

        
部署结果

        部署完成后,我们在其他工程中,直接 compile 'package:library_name:version'就可以引用了。Gradle 会自动查找到这个依赖以及相应的库文件,引入到工程中进行组建。

5、多 Module 部署

        在比较大的项目中,我们经常会在一个 Project 中拥有多个 Module,而这些 Module 中又有相互引用的情况。比如:

        
多 Module 示例

        比如这个例子中,project 下有两个 Module,而 ModuleB 又在项目内引用了 ModuleA,这时候,在部署 ModuleB 的时候,为 ModuleB 生成的 pom 文件会有问题:

        [站外图片上传中...(image-49af3f-1509673794164)]

        我们可以看出,ModuleB 的 pom 中声明引用了 ModuleA,但是 Module A 对应的 groupIdversion 都不对,这样,在第三方引用 ModuleB 的时候,会出现依赖错误。这个时候,解决办法是在 ModuleA 的 build.gradle 中加入 project.groupproject.version ,这样在生成 ModuleB 的 pom 的时候,会自动填入这两个值。

        ModuleA 的 build.gradle 如下:

        
project.group 和 project.version

        如果填写了 project.groupproject.version 后,就没必要在 mavenDeployer 中填写 pom.groupIdpom.version 了,Gradle 会自动使用 project.groupproject.version 填入。这样,为 ModuleA 和 ModuleB 部署,都不会出现问题了。

6、参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,088评论 2 44
  • 不记得是从哪看到的长投,看到有训练营的时候没有犹豫就报了,想着九块钱买不了吃亏买不了上当,想要看一看投资理财...
    MiaZhang01阅读 115评论 1 0
  • 今天开始了了C语言基础课程,听了老师讲述了以下内容: 一.C语言程序格式,这里 学习到了C语言编程的基本语...
    泡面小佳阅读 299评论 1 1
  • 岁岁年年,周而复始 ——第五十七节小评 今天是2016年最后一天,12月31日。 感觉才刚刚过了2015年,因为有...
    叶子程阅读 364评论 0 0